package day20180129.designMode.five_Singleton;

/**
 * Created by 14394 on 2018/1/29.
 */

/*
*    windows是多进程多线程的，不可避免的会出现通过一个进程或者线程同时操作一个对象的现象
*       使用场景： 要求生产唯一的序列号
*                 web中的计数器，不用每次刷新都在数据库里加一次，用单例先缓存起来
*                 创建对象需要消耗的资源较多的情况
*          注意事项:多线程是需要使用同步锁synchronized，防止被多次实例化
*                   单例模式有多种实现，自行查阅
* */
public class Test extends Thread{
    public Test(String name) {
        super(name);
    }

    public static void main(String[] args) {
        //单线程
        System.out.println("Start.");
        Singleton obj1 = Singleton.getInstance();
        Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
            System.out.println("obj1 与 obj2 是相同的实例");
        }else {
            System.out.println("obj1 与 obj2 是不同的实例");
        }
        System.out.println("End.");

        //多线程
        System.out.println("Start.");
        new Test("A").start();
        new Test("B").start();
        new Test("C").start();
        System.out.println("End.");

    }

    @Override
    public void run() {
        Singleton1 obj = Singleton1.getInstance();
        System.out.println(getName() + ": obj = " +obj);
    }
}
